/**
 * 路径匹配器
 * @param {string} pattern
 * @param {string} path
 * @returns {Boolean}
 */
export function isPathMatch(pattern, path) {
    const regexPattern = pattern.replace(/\//g, '\\/').replace(/\*\*/g, '.*').replace(/\*/g, '[^\\/]*')
    const regex = new RegExp(`^${regexPattern}$`)
    return regex.test(path)
}

/**
 * 判断value字符串是否为空
 * @param {string} value
 * @returns {Boolean}
 */
export function isEmpty(value) {
    if (value == null || value == "" || value == undefined || value == "undefined") {
        return true
    }
    return false
}

/**
 * 判断url是否是http或https
 * @param {string} url
 * @returns {Boolean}
 */
export function isHttp(url) {
    return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1
}

/**
 * 判断path是否为外链
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
    return /^(https?:|mailto:|tel:)/.test(path)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUsername(str) {
    const valid_map = ['admin', 'editor']
    return valid_map.indexOf(str.trim()) >= 0
}

/**
 * @param {string} url
 * @returns {Boolean}
 */
export function validURL(url) {
    const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
    return reg.test(url)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validLowerCase(str) {
    const reg = /^[a-z]+$/
    return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUpperCase(str) {
    const reg = /^[A-Z]+$/
    return reg.test(str)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validAlphabets(str) {
    const reg = /^[A-Za-z]+$/
    return reg.test(str)
}

/**
 * @param {string} email
 * @returns {Boolean}
 */
export function validEmail(email) {
    const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
    return reg.test(email)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function isString(str) {
    return typeof str === 'string' || str instanceof String
}

/**
 * @param {Array} arg
 * @returns {Boolean}
 */
export function isArray(arg) {
    if (typeof Array.isArray === 'undefined') {
        return Object.prototype.toString.call(arg) === '[object Array]'
    }
    return Array.isArray(arg)
}

/**
 * 验证货币格式
 * @param {string|number} value - 待验证的值
 * @returns {boolean} 是否为有效的货币格式
 */
export function validateCurrency(value) {
    if (!value && value !== 0) return false;

    // 支持整数、千分位格式和小数格式（最多4位小数）
    const currencyRegex = /^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(\.[0-9]{1,4})?$/;
    return currencyRegex.test(String(value));
}

/**
 * 验证是否为正整数且是100的倍数
 * @param {string|number} value - 待验证的值
 * @returns {boolean} 是否为正整数且是100的倍数
 */
export function validateStockQuantity(value) {
    if (!value && value !== 0) return false;

    // 先检查是否为纯数字字符串
    if (typeof value === 'string' && !/^\d+$/.test(value)) {
        return false;
    }

    const num = parseInt(value, 10);
    // 检查是否为正整数且能被100整除
    return Number.isInteger(num) && num > 0 && num % 100 === 0;
}

/** 校验日期时间格式 */
export function isValidDateFormat(dateString) {
    if (!dateString) return false;

    // 支持的格式: YYYY-MM-DD 或 YYYY-MM-DD HH:mm:ss
    const regex1 = /^\d{4}-\d{2}-\d{2}$/;
    const regex2 = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/;

    if (!(regex1.test(dateString) || regex2.test(dateString))) {
        return false;
    }

    // 进一步验证日期有效性
    const date = new Date(dateString);
    return date !== 'Invalid Date' && !isNaN(date);
}